import Vue from 'vue'
// 引入插件
import VueRouter from 'vue-router'
// import login from '../views/login/login.vue'
// import layout from '../views/layout/layout.vue'
// 导入组件
// @是一个特殊的符号，在webpack中的配置中它表示src目录
// import Login from '@/views/login/login.vue'
// 全局调用路由的代码
// 使用Vue插件的固定格式是： Vue.use(插件)
Vue.use(VueRouter)

const routes = [
  {
    path: '/login',
    name: 'login',
    // 这样可以实现懒加载
    component: () => import('../views/login/login.vue')
    // component: login
  },
  {
    path: '/',
    name: 'layout',
    // component: layout
    component: () => import('../views/layout/layout.vue'),
    children: [
      {
        // path为空,那就是默认显示的路由的组件
        path: '',
        name: 'home',
        component: () => import('../views/home/home.vue')
      },
      {
        // 如果在path前没有/，则要拼接一级路由的path
        // 如果在path前加上/，则忽略（不用拼接）一级路由的path
        path: 'articles',
        name: 'articles',
        component: () => import('../views/articles/articles.vue')
      },
      {
        path: 'images',
        name: 'images',
        component: () => import('../views/images/images.vue')
      },
      {
        path: 'addArticle',
        name: 'addArticle',
        component: () => import('../views/articles/articleAdd.vue')
      },
      {
        path: 'articleEdit/:id',
        name: 'articleEdit',
        component: () => import('../views/articles/articleEdit.vue')
      },
      {
        path: 'comment',
        name: 'comment',
        component: () => import('../views/comment/comment.vue')
      },
      {
        path: 'fans',
        name: 'fans',
        component: () => import('../views/fans/fans.vue')
      },
      {
        path: 'settings',
        name: 'settings',
        component: () => import('../views/settings/settings.vue')
      },
      {
        path: 'tinymce',
        name: 'tinymce',
        component: () => import('../views/tinymce/tinymce.vue')
      }
    ]
  },
  {
    // 错误表达的地址用星号表示
    path: '*',
    name: 'page404',
    component: () => import('../views/page404/index.vue')
  }
]

const router = new VueRouter({
  routes
})

// 路由守卫的格式
// 只要是发生了路由的跳转（还没有进入到目标路由），就会执行这个回调
// to: 要跳入的路由信息。  你要去哪里
// from: 要跳出的路由信息。你从哪里来
// next: 是一个函数，放行方法
//   - next() : 正确跳转。允许进入到 to 路由
//   - next(路由地址) : 不允许去to，而转去指定的路由地址
// 如果没有调用next()，则页面就不能正常显示了

// 如下页面是需要登陆之后才能访问的
const authPageList = ['/', '/articles', '/images', '/xxxxx']
router.beforeEach((to, from, next) => {
  // next('/login') 跳入到login，此时又启动路由守卫了，再次跳入login,再次启动路由守卫
  // next('/login')
  // // 如果你要去的页面是主页，而你又没有登陆，则回到登陆页
  // // if (to.path === '/' || to.path === '/articles') {
  if (authPageList.includes(to.path)) {
    if (localStorage.getItem('tokenStr')) {
      // 去的地方是上述几个页面,又有token,那就放行
      next()
    } else {
      // console.log('你要去的是主页，或者内部页面,但是你并没有登陆，所以路由导航守卫把你送到的Login')
      next('/login')
    }
  } else {
    if (to.path === '/login' && localStorage.getItem('tokenStr')) {
      // 如果你已经登陆了,还想去登录页面,不让回去，就让它回去主页
      next('/')
    } else {
      // 如果目标是不是需要验证的页面,放行
      next()
    }
  }
})

export default router
